import os
import shutil


def move_images_by_index(source_root, target_root, need_position):
    """
    将一个文件夹下的部分图片移动到另一个文件夹
    移动的原则是根据图片的机位
    """
    os.makedirs(target_root, exist_ok=True)

    # 遍历源文件夹中的所有文件夹
    for folder in os.listdir(source_root):
        source_folder = os.path.join(source_root, folder)
        target_folder = os.path.join(target_root, folder)

        os.makedirs(target_folder, exist_ok=True)

        # 获取文件夹中的所有文件并按文件编号排序
        files = sorted(os.listdir(source_folder), key=lambda x: int(os.path.splitext(x)[0]))

        # 获取文件夹中最小下标的文件编号
        min_index = int(os.path.splitext(files[0])[0])

        # 遍历排序后的文件
        for filename in files:
            file_index = int(os.path.splitext(filename)[0])

            # 计算当前文件编号与最小编号的差，并对18取余
            if (file_index - min_index) % 18 in need_position:
                source_file = os.path.join(source_folder, filename)
                target_file = os.path.join(target_folder, filename)

                # 复制文件到目标文件夹并删除原来的
                shutil.copy2(source_file, target_file)
                # os.remove(source_file)

    print("处理完成！")


def move_images(source_root, target_root):
    """
    将筛选后的图片移动到同一个文件夹里
    """
    os.makedirs(target_root, exist_ok=True)

    # 遍历源文件夹中的所有文件夹
    for folder in os.listdir(source_root):
        source_folder = os.path.join(source_root, folder)
        target_folder = os.path.join(target_root, folder)

        os.makedirs(target_folder, exist_ok=True)

        # 获取文件夹中的所有文件并按文件编号排序
        files = sorted(os.listdir(source_folder), key=lambda x: int(os.path.splitext(x)[0]))

        # 遍历排序后的文件
        for filename in files:
            source_file = os.path.join(source_folder, filename)
            target_file = os.path.join(target_folder, filename)

            # 复制文件到目标文件夹
            shutil.copy2(source_file, target_file)
            # os.remove(source_file)

    print("处理完成！")


if __name__ == "__main__":
    # print(1111)
    # # move_images函数的调用
    # # 这个是将eth的图片分为18个机位
    # source_root = "/home/xian/mzs/mzs_code/Dataset/ETH/showlandmark"
    # # target_root = "/home/xian/mzs/mzs_code/Dataset/ETH/show_1"
    # # need_position = [11, 12, 14, 15]  # 例如只处理机位11, 12, 14, 15的图片
    # for i in range(18):
    #     target_root = f"/home/xian/mzs/mzs_code/Dataset/ETH/show_{i}"
    #     need_position = [i]  # 例如只处理机位11, 12, 14, 15的图片
    #     move_images_by_index(source_root, target_root, need_position)

    print(2222)
    # 这个是将筛选后的eth各机位图片移动到同一个文件夹
    target_root = "/home/xian/mzs/mzs_code/Dataset/ETH/result/all_landmark"
    for i in range(18):
        source_root = f"/home/xian/mzs/mzs_code/Dataset/ETH/result/111/show_{i}"
        if not os.path.exists(source_root):
            continue
        print(source_root)
        move_images(source_root, target_root)

